home *** CD-ROM | disk | FTP | other *** search
- (* Compute all n! permutations of the integers 1 ... n. *)
-
- MODULE permute;
-
- FROM InOut IMPORT Read, Write, WriteLn;
-
- VAR n: CARDINAL;
- ch: CHAR;
- a: ARRAY [1..20] OF CHAR;
-
- PROCEDURE output;
- VAR i: CARDINAL;
-
- BEGIN
- FOR i := 1 TO n DO Write(a[i]) END;
- WriteLn
- END output;
-
- PROCEDURE permute(k: CARDINAL);
- VAR i: CARDINAL;
- t: CHAR;
-
- BEGIN
- IF k = 1 THEN output
- ELSE
- permute(k-1);
- FOR i := 1 TO k-1 DO
- t := a[i];
- a[i] := a[k];
- a[k] := t;
- permute(k-1);
- t := a[i];
- a[i] := a[k];
- a[k] := t;
- END
- END
- END permute;
-
- BEGIN
- Write('>'); Read(ch);
- n := 0;
- WHILE ch > ' ' DO
- INC(n); a[n] := ch;
- Write(ch); Read(ch);
- END;
- WriteLn;
- permute(n)
- END permute.
-